#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>

int main()
{
    int fd = open("file.txt", O_RDONLY | O_CREAT, 0666);
    if(fd < 0)
    {
        perror("open error!");
        return 1;
    }

    dup2(fd,0);
    close(fd);

    while(1)
    {
        char buffer[128];
        if(!fgets(buffer, sizeof(buffer), stdin)) break;
        printf("%s", buffer);
    }
    return 0;
}

//int main()
//{
//    int fd = open("file.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);
//    if (fd < 0)
//    {
//        perror("open error!");
//        return 1;
//    }
//
//    dup2(fd, 1); // 输出重定向
//    printf("fd: %d\n", fd);
//    fprintf(stdout, "hello stdout!\n");
//
//    const char* buffer = "hello word!\n";
//    write(fd, buffer, strlen(buffer));
//
//    close(fd);
//    return 0;
//}

//int main()
//{
//    close(1);
//    int fd = open("file.txt", O_WRONLY | O_CREAT, 0666);
//    if (fd < 0)
//    {
//        perror("open error!");
//        return 1;
//    }
//
//    printf("fd: %d\n", fd);
//    fflush(stdout);
//    close(fd);
//    return 0;
//}

//int main()
//{
//    umask(0);
//    int fd = open("log.txt", O_RDONLY, 0666);
//
//    if (fd < 0)
//    {
//        perror("open error!");
//        return 1;
//    }
//
//    while (1)
//    {
//        char buffer[128];
//        int n = read(fd, buffer, sizeof(buffer) - 1);
//        if (n > 0)
//        {
//            buffer[n] = 0;
//            printf("%s", buffer);
//        }
//        if (n == 0)
//        {
//            break;
//        }
//    }
//    close(fd);
//
//    return 0;
//}
